/**
 * @description 计算综合预测得分
 */
const calculateScore = (stock) => {
    const {
        code, //编码
        changePercent, // 当日涨跌幅
        volumeRatio, // 量比
        turnoverRate, // 换手率
        pe, // 市盈率（动）
        pb, // 市净率
        mainMoneyNet, // 主力资金净流入（元）
        threeDayChange, // 3日涨跌幅
        fiveDayChange, // 5日涨跌幅
        marketValue//流通市值
    } = stock;
    let score = 0;

    // ================= 1. 资金动能分析（30分）=================
    // 1.1 主力资金强度（15分）
    if (mainMoneyNet > 1e8) score += 15;
    else if (mainMoneyNet > 5e7) score += 10;
    else if (mainMoneyNet > 1e7) score += 5;
    else if (mainMoneyNet < -1e8) score -= 15;
    else if (mainMoneyNet < -5e7) score -= 10;

    // 1.2 量比（15分）
    if (volumeRatio > 1) {
        if (volumeRatio > 3) score += changePercent > 0 ? 15 : -15;
        else if (volumeRatio > 2) score += changePercent > 0 ? 10 : -10;
        else score += changePercent > 0 ? 5 : -5; // 量比>1但≤2时基础加分
    } else {
        score += changePercent < 0 ? 8 : -8; // 量比≤1时反向操作
    }

    // ================= 2. 估值安全边际（25分）=================
    // 2.1 市盈率（10分）
    if (pe > 0) {
        if (pe < 10) score += 10;
        else if (pe < 20) score += 7;
        else if (pe < 30) score += 3;
        else if (pe > 50) score -= 10;
        else if (pe > 30) score -= 5;
    }

    // 2.2 市净率（10分）
    if (pb > 0) {
        if (pb < 1) score += 10;
        else if (pb < 1.5) score += 7;
        else if (pb < 3) score += 3;
        else if (pb > 5) score -= 10;
        else if (pb > 3) score -= 5;
    }

    // 2.3 流通市值（5分）
    if (marketValue >= 5e9 && marketValue <= 2e10) score += 5;
    else if (marketValue < 5e9 || marketValue > 2e10) score -= 3;

    // ================= 3. 技术动能分析（35分）=================
    // 3.1 换手率（优化为4%-10%区间，10分）
    if (turnoverRate >= 4 && turnoverRate <= 10) {
        score += 10;
    } else if (turnoverRate > 10) {
        score += turnoverRate <= 15 ? 5 : -5; // 10%-15%部分加分，超过扣分
    } else {
        score -= 3; // 低于4%扣分
    }

    // 3.2 涨幅分段（2%-5%核心区间，10分）
    if (changePercent >= 2 && changePercent <= 5) score += 10;
    else if (changePercent > 5) {
        if (changePercent <= 8) score += 5;  // 5%-8%
        else if (changePercent <= 10) score += 3; // 8%-10%
    } else if (changePercent >= 0) score += 2; // 0%-2%基础分

    // 3.2 短期趋势动能（三日/五日分段，15分）
    // 三日涨跌幅
    if (threeDayChange >= 10) score += 10;
    else if (threeDayChange >= 5) score += 5;
    else if (threeDayChange < -10) score -= 10;
    else if (threeDayChange < -5) score -= 5;

    // 五日涨跌幅
    if (fiveDayChange >= 15) score += 5;
    else if (fiveDayChange >= 5) score += 3;
    else if (fiveDayChange < -15) score -= 5;
    else if (fiveDayChange < -5) score -= 3;

    // ================= 4. 市场情绪分析（10分）=================
    // 涨停/跌停极端情况
    const isChiNext = code.startsWith('688') || code.startsWith('300') || code.startsWith('301');
    const limit = isChiNext ? 19.5 : 9.5;
    if (Math.abs(changePercent) >= limit) {
        score += changePercent > 0 ? 10 : -10;
    }

    return score;
};


/**
 * @description 计算综合预测得分
 */
const calculateScoreBack = (stock) => {
    const {
        code, //编码
        changePercent, // 当日涨跌幅
        volumeRatio, // 量比
        turnoverRate, // 换手率
        pe, // 市盈率（动）
        pb, // 市净率
        mainMoneyNet, // 主力资金净流入（元）
        threeDayChange, // 3日涨跌幅
        fiveDayChange // 5日涨跌幅
    } = stock;
    let score = 0;

    // ================= 1. 资金动能分析（30分）=================
    // 1.1 主力资金强度（15分）
    if (mainMoneyNet > 1e8) score += 15; // 主力净流入>1亿
    else if (mainMoneyNet > 5e7) score += 10;
    else if (mainMoneyNet > 1e7) score += 5;
    else if (mainMoneyNet < -1e8) score -= 15;
    else if (mainMoneyNet < -5e7) score -= 10;

    // 1.2 量价配合（15分）
    if (volumeRatio > 3) {
        score += changePercent > 0 ? 15 : -15;
    } else if (volumeRatio > 2) {
        score += changePercent > 0 ? 10 : -10;
    } else if (volumeRatio < 0.8) {
        score += changePercent < 0 ? 8 : -8;
    }

    // ================= 2. 估值安全边际（25分）=================
    // 2.1 市盈率估值（15分）
    if (pe > 0) {
        if (pe < 15) score += 15; // 低估值区间
        else if (pe < 30) score += 9; // 合理区间
        else if (pe > 50) score -= 15; // 高估值惩罚加重
    }

    // 2.2 市净率估值（10分）
    if (pb > 0) {
        if (pb < 1.5) score += 10; // 破净保护加强
        if (pb < 3) score += 5; // 合理市净率
        else if (pb > 5) score -= 5; // 高市净率惩罚
    }

    // ================= 3. 技术动能分析（35分）=================
    // 3.1 换手动能（10分）
    if (turnoverRate > 15) {
        score += changePercent > 0 ? 10 : -10;
    } else if (turnoverRate > 8) {
        score += changePercent > 0 ? 5 : -5;
    }

    // 3.2 短期趋势动能（25分）
    if (threeDayChange > 15) score += 15;
    else if (threeDayChange < -15) score -= 15;
    if (fiveDayChange > 25) score += 10;
    else if (fiveDayChange < -25) score -= 10;

    // ================= 4. 市场情绪分析（10分）=================
    // 判断股票所属板块 科创板和创业板20%，主板10%
    if (code.startsWith('688') || code.startsWith('300') || code.startsWith('301')) {
        if (Math.abs(changePercent) >= 19.5) {
            score += changePercent > 0 ? 10 : -10;
        }
    } else {
        if (Math.abs(changePercent) >= 9.5) {
            score += changePercent > 0 ? 10 : -10;
        }
    }

    return score;
};


